﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SVC_BLL;
using SVC_DAL;
using System.Drawing.Printing;
using ImprimeCupom;

//using Bematech.Fiscal.ECF.OperacoesNaoFiscais;
//using Bematech.MiniImpressoras;
using System.IO;

namespace SVC.MOVIMENTACOES
{
    public partial class Vendas : Form
    {
        public Vendas()
        {
            InitializeComponent();
        }

        VendasBLL objVen = new VendasBLL();
        vendaItensBLL objVI = new vendaItensBLL();

        public void carregacombo()
        {
            try
            {
                Dados objD = new Dados();
                objD.preencheComboBox(cbFuncionario, "Usuario", "usu_codigo", "usu_nome", "", "usu_nome");
                objD = null;

                objD = new Dados();
                objD.preencheComboBoxCliente(cbCliente, "Cliente", "cli_codigo", "Cliente", "", "Cliente");
                objD = null;

                objD = new Dados();
                objD.preencheComboBox(cbProdutos, "Produtos", "pro_codigo", "pro_nome", "pro_quantidade > 0", "pro_nome");
                objD = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaGrid()
        {
            try
            {
                DataTable tab = null;
                tab = objVen.localizarEmTudo(txtPesquisar.Text);
                gvPesquisa.DataSource = tab;
                //gvPesquisa.Columns["cat_codigo"].HeaderText = "Código";
                //gvPesquisa.Columns["cat_descricao"].HeaderText = "Nome";
                //gvPesquisa.Columns[1].Width = gvPesquisa.Width - 103;
                stiloGrid();
                gvPesquisa.ClearSelection();
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void stiloGrid()
        {

            int i = 0;
            if (gvPesquisa.Rows.Count != 0)
            {
                foreach (DataGridViewRow row in gvPesquisa.Rows)
                {
                    if (i % 2 != 0)
                    {
                        row.DefaultCellStyle.BackColor = Color.FromName("ActiveCaption");
                        row.DefaultCellStyle.ForeColor = Color.Black;
                    }
                    i++;
                }
                gvPesquisa.ClearSelection();
                objVen.limpar();
                //objVI.limpar();
            }
        }

        public void limpar()
        {
            try
            {
                txtCodigo.Text = "";
                txtData.Text = DateTime.Now.ToString();
                txtObservacoes.Text = "";
                txtQuantidade.Text = "";
                //txtQuantidadeParcelas.Text = "";
                txtSubtotal.Text = "";
                txtTotalFinal.Text = "";
                txtTotalItens.Text = "";
                txtValorUnitario.Text = "";
                cbProdutos.SelectedIndex = -1;
                dgDados.Rows.Clear();
                txtPesquisar.Text = "";
                txtCodigo.ReadOnly = false;
                txtCodigo.Enabled = true;
                cbFuncionario.SelectedValue = global.codUsuario;
                //cbProdutos.Enabled = true;
                cbCliente.SelectedIndex = -1;
                txtDescontoValor.Text = "";
                txtDesconto.Text = "";
                txtValorTotal.Text = "";
                txtDescontoPercentual.Text = "";
                txtDescontoValor.Text = "";
                txtSubtotal.Text = "";
                txtPercentual.Text = "";
                txtQuantidade.Text = "";
                txtQuantidadeTotal.Text = "";
                txtCodigoBarra.Text = "";
                cbTipoVenda.SelectedIndex = 0;
                
                btnAlterarTipoVenda.Enabled = true;
                cbTipoVenda.Enabled = true;
                txtValorUnitario.Enabled = true;
                txtQuantidade.Enabled = true;                
                
                lVendaCancelada.Visible = false;
                cbRenovarVenda.Visible = false;
                cbRenovarVenda.Checked = true;
                btSalvar.Enabled = true;
                btExcluir.Enabled = true;

                btIncluirProduto.Enabled = true;
                btExcluirProduto.Enabled = true;
                txtDescontoPercentual.Enabled = true;
                txtDescontoValor.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        public void carregaPropriedadesAntProxPrimUlt()
        {
            try
            {
                String x = "";
                for (int i = 0; i <= txtValorTotal.Text.Length - 1; i++)
                {
                    if ((txtValorTotal.Text[i] >= '0' &&
                    txtValorTotal.Text[i] <= '9') ||
                    txtValorTotal.Text[i] == ',')
                    {
                        x += txtValorTotal.Text[i];
                    }
                }
                txtValorTotal.Text = x;

                x = "";
                for (int i = 0; i <= txtTotalFinal.Text.Length - 1; i++)
                {
                    if ((txtTotalFinal.Text[i] >= '0' &&
                    txtTotalFinal.Text[i] <= '9') ||
                    txtTotalFinal.Text[i] == ',')
                    {
                        x += txtTotalFinal.Text[i];
                    }
                }
                txtTotalFinal.Text = x;

                x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                txtDescontoValor.Text = x;


                //Vendas
                if (txtCodigo.Text != "")
                    objVen.codigo = int.Parse(txtCodigo.Text);
                else
                    objVen.codigo = 0;
                txtData.Text = txtData.Text.Trim();
                if (txtData.Text != "")
                    objVen.data = DateTime.Parse(txtData.Text);
                else
                    throw new Exception("O campo data é de preenchimento obrigatório");
                txtObservacoes.Text = txtObservacoes.Text.Trim();
                if (txtObservacoes.Text != "")
                    objVen.observacao = txtObservacoes.Text;
                else
                    objVen.observacao = null;
                if (cbFuncionario.SelectedValue == null)
                    throw new Exception("Por favor, informe qual funcionário está efetuando a venda");
                else
                    objVen.usuario = int.Parse(cbFuncionario.SelectedValue.ToString());
                if (cbCliente.SelectedValue == null)
                    throw new Exception("Por favor, informe qual o cliente será utilizado nesta venda");
                else
                    objVen.cliente = int.Parse(cbCliente.SelectedValue.ToString());



                if (txtDescontoPercentual.Text == "")
                    objVen.percentual = 0;
                else
                    objVen.percentual = Double.Parse(txtDescontoPercentual.Text);

                if (txtDescontoValor.Text == "")
                    objVen.desconto = 0;
                else
                    objVen.desconto = Double.Parse(txtDescontoValor.Text);

                objVen.valor = Double.Parse(txtValorTotal.Text);
                objVen.valorFinal = Double.Parse(txtTotalFinal.Text);

                if (cbRenovarVenda.Checked == true)
                    objVen.ven_status = "Ativo";
                else if (cbRenovarVenda.Checked == false)
                    objVen.ven_status = "Cancelado";        
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        public void carregaPropriedades()
        {
            try
            {
                String x = "";
                for (int i = 0; i <= txtValorTotal.Text.Length - 1; i++)
                {
                    if ((txtValorTotal.Text[i] >= '0' &&
                    txtValorTotal.Text[i] <= '9') ||
                    txtValorTotal.Text[i] == ',')
                    {
                        x += txtValorTotal.Text[i];
                    }
                }
                txtValorTotal.Text = x;

                x = "";
                for (int i = 0; i <= txtTotalFinal.Text.Length - 1; i++)
                {
                    if ((txtTotalFinal.Text[i] >= '0' &&
                    txtTotalFinal.Text[i] <= '9') ||
                    txtTotalFinal.Text[i] == ',')
                    {
                        x += txtTotalFinal.Text[i];
                    }
                }
                txtTotalFinal.Text = x;

                x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                txtDescontoValor.Text = x;


                //Vendas
                if (txtCodigo.Text != "")
                    objVen.codigo = int.Parse(txtCodigo.Text);
                else
                    objVen.codigo = 0;
                txtData.Text = txtData.Text.Trim();
                if (txtData.Text != "")
                    objVen.data= DateTime.Parse(txtData.Text);
                else
                    throw new Exception("O campo data é de preenchimento obrigatório");
                txtObservacoes.Text = txtObservacoes.Text.Trim();
                if (txtObservacoes.Text != "")
                    objVen.observacao = txtObservacoes.Text;
                else
                    objVen.observacao = null;
                if (cbFuncionario.SelectedValue == null)
                    throw new Exception("Por favor, informe qual funcionário está efetuando a venda");
                else
                    objVen.usuario = int.Parse(cbFuncionario.SelectedValue.ToString());
                if (cbCliente.SelectedValue == null)
                    throw new Exception("Por favor, informe qual o cliente será utilizado nesta venda");
                else
                    objVen.cliente= int.Parse(cbCliente.SelectedValue.ToString());                

                

                if (txtDescontoPercentual.Text == "")
                    objVen.percentual = 0;
                else
                    objVen.percentual = Double.Parse(txtDescontoPercentual.Text);

                if (txtDescontoValor.Text == "")
                    objVen.desconto = 0;
                else
                    objVen.desconto = Double.Parse(txtDescontoValor.Text);

                objVen.valor = Double.Parse(txtValorTotal.Text);
                objVen.valorFinal = Double.Parse(txtTotalFinal.Text);

                MOVIMENTACOES.FormaPagamentoVendas frm = new MOVIMENTACOES.FormaPagamentoVendas();
                frm.ShowDialog();
                if (frm.cancelar)
                    objVen.limpar();
                else
                {
                    objVen.forma_pagamento = frm.formaPagamento;
                    objVen.parcelas = frm.qtdParcelas;
                }
                frm = null;
                
                if (cbRenovarVenda.Checked == true)
                    objVen.ven_status = "Ativo";
                else if (cbRenovarVenda.Checked == false)
                    objVen.ven_status = "Cancelado";

                objVen.ven_tipo = cbTipoVenda.SelectedItem.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaPropriedadesCondicional()
        {
            try
            {
                String x = "";
                for (int i = 0; i <= txtValorTotal.Text.Length - 1; i++)
                {
                    if ((txtValorTotal.Text[i] >= '0' &&
                    txtValorTotal.Text[i] <= '9') ||
                    txtValorTotal.Text[i] == ',')
                    {
                        x += txtValorTotal.Text[i];
                    }
                }
                txtValorTotal.Text = x;

                x = "";
                for (int i = 0; i <= txtTotalFinal.Text.Length - 1; i++)
                {
                    if ((txtTotalFinal.Text[i] >= '0' &&
                    txtTotalFinal.Text[i] <= '9') ||
                    txtTotalFinal.Text[i] == ',')
                    {
                        x += txtTotalFinal.Text[i];
                    }
                }
                txtTotalFinal.Text = x;

                x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                txtDescontoValor.Text = x;


                //Vendas
                if (txtCodigo.Text != "")
                    objVen.codigo = int.Parse(txtCodigo.Text);
                else
                    objVen.codigo = 0;
                txtData.Text = txtData.Text.Trim();
                if (txtData.Text != "")
                    objVen.data = DateTime.Parse(txtData.Text);
                else
                    throw new Exception("O campo data é de preenchimento obrigatório");
                txtObservacoes.Text = txtObservacoes.Text.Trim();
                if (txtObservacoes.Text != "")
                    objVen.observacao = txtObservacoes.Text;
                else
                    objVen.observacao = null;
                if (cbFuncionario.SelectedValue == null)
                    throw new Exception("Por favor, informe qual funcionário está efetuando a venda");
                else
                    objVen.usuario = int.Parse(cbFuncionario.SelectedValue.ToString());
                if (cbCliente.SelectedValue == null)
                    throw new Exception("Por favor, informe qual o cliente será utilizado nesta venda");
                else
                    objVen.cliente = int.Parse(cbCliente.SelectedValue.ToString());



                if (txtDescontoPercentual.Text == "")
                    objVen.percentual = 0;
                else
                    objVen.percentual = Double.Parse(txtDescontoPercentual.Text);

                if (txtDescontoValor.Text == "")
                    objVen.desconto = 0;
                else
                    objVen.desconto = Double.Parse(txtDescontoValor.Text);

                objVen.valor = Double.Parse(txtValorTotal.Text);
                objVen.valorFinal = Double.Parse(txtTotalFinal.Text);

            
                objVen.forma_pagamento = 0;
                objVen.parcelas = 0;
                

                if (cbRenovarVenda.Checked == true)
                    objVen.ven_status = "Ativo";
                else if (cbRenovarVenda.Checked == false)
                    objVen.ven_status = "Cancelado";

                objVen.ven_tipo = cbTipoVenda.SelectedItem.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaPropriedadesAlterar()
        {
            try
            {
                if (txtCodigo.Text != "")
                    objVen.codigo = int.Parse(txtCodigo.Text);
                else
                    objVen.codigo = 0;
                objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                if (cbRenovarVenda.Checked == true)
                    objVen.ven_status = "Ativo";
                else if (cbRenovarVenda.Checked == false)
                    objVen.ven_status = "Cancelado";
                if (cbTipoVenda.SelectedIndex == 0)
                    objVen.ven_tipo = "Venda";
                else if (cbTipoVenda.SelectedIndex == 1)
                    objVen.ven_tipo = "Condicional";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void carregaCampos()
        {
            try
            {
                dgDados.Rows.Clear();
                txtCodigo.Text = objVen.codigo.ToString();
                txtData.Text =  objVen.data.ToString();
                cbCliente.SelectedValue = objVen.cliente;
                cbFuncionario.SelectedValue = objVen.usuario;
                //objVen.forma_pagamento;
                //objVen.parcelas = 0;
                txtValorTotal.Text =  objVen.valor.ToString();
                txtTotalFinal.Text = objVen.valorFinal.ToString();
                txtObservacoes.Text = objVen.observacao;
                txtDescontoValor.Text =  objVen.desconto.ToString();
                txtDescontoPercentual.Text = objVen.percentual.ToString();

                //carrega produtos Venda
                DataTable tab = objVI.localizarLeaveComRetorno(objVen.codigo.ToString(), "ven_codigo");
                for (int i = 0; i < tab.Rows.Count; i++)
                {
                    ProdutosBLL objPro = new ProdutosBLL();
                    objPro.localizar(tab.Rows[i][1].ToString(), "pro_codigo");

                    dgDados.Rows.Add(tab.Rows[i][0].ToString(), tab.Rows[i][1].ToString(), objPro.pro_nome, tab.Rows[i][2].ToString(), Convert.ToDouble(tab.Rows[i][3].ToString()).ToString("C"), Convert.ToDouble(tab.Rows[i][4].ToString()).ToString("C"), Convert.ToDouble(tab.Rows[i][5].ToString()).ToString("C"), tab.Rows[i][6].ToString());

                    objPro = null;
                }

                int qtdade = 0;
                for (int i = 0; i < dgDados.Rows.Count; i++)
                    qtdade += int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());

                txtTotalItens.Text = qtdade.ToString();

                txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");
                txtValorTotal.Text = Convert.ToDouble(txtValorTotal.Text).ToString("C");
                txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");


                if (global.permissao != "Gerente" && global.codUsuario.ToString() != cbFuncionario.SelectedValue.ToString())
                {
                    btSalvar.Enabled = false;
                    btExcluir.Enabled = false;
                }
                else
                {
                    btSalvar.Enabled = true;
                    btExcluir.Enabled = true;
                }

                if (objVen.ven_status == "Cancelado")
                {
                    lVendaCancelada.Visible = true;
                    cbRenovarVenda.Visible = true;
                    cbRenovarVenda.Checked = false;
                    btExcluir.Enabled = false;
                }
                else
                {
                    lVendaCancelada.Visible = false;
                    cbRenovarVenda.Visible = false;
                    cbRenovarVenda.Checked = true;
                    btExcluir.Enabled = true;
                }

                cbTipoVenda.SelectedItem = objVen.ven_tipo;
                if (cbTipoVenda.SelectedIndex == 0)
                {
                    btnAlterarTipoVenda.Enabled = false;
                    cbTipoVenda.Enabled = false;
                }
                else if (cbTipoVenda.SelectedIndex == 1)
                {
                    btnAlterarTipoVenda.Enabled = true;
                    cbTipoVenda.Enabled = false;
                }

                btIncluirProduto.Enabled = false;
                btExcluirProduto.Enabled = false;
                txtDescontoPercentual.Enabled = false;
                txtDescontoValor.Enabled = false;
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        public void insereProdutosVenda()
        {
            try
            {
                    //altera (exclui)
                    objVI.ven_codigo= objVen.codigo;
                    objVI.excluir();

                    //itensVendas
                    for (int i = 0; i < dgDados.Rows.Count; i++)
                    {

                        //e depois insere
                        objVI.ven_codigo= objVen.codigo;
                        objVI.pro_codigo= int.Parse(dgDados.Rows[i].Cells[1].Value.ToString());
                        objVI.vi_quantidade = int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());

                        String valorUnitario = dgDados.Rows[i].Cells[4].Value.ToString();
                        
                        String x = "";
                        for (int j = 0; j <= valorUnitario.Length - 1; j++)
                        {
                            if ((valorUnitario[j] >= '0' &&
                            valorUnitario[j] <= '9') ||
                            valorUnitario[j] == ',')
                            {
                                x += valorUnitario[j];
                            }
                        }
                        valorUnitario = x;
                        objVI.vi_valorUnitario = Double.Parse(valorUnitario);
                        
                        String subtotal = dgDados.Rows[i].Cells[5].Value.ToString();
                        x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;
                        objVI.vi_subtotal = Double.Parse(subtotal);

                        String desconto = dgDados.Rows[i].Cells[6].Value.ToString();
                        x = "";
                        for (int j = 0; j <= desconto.Length - 1; j++)
                        {
                            if ((desconto[j] >= '0' &&
                            desconto[j] <= '9') ||
                            desconto[j] == ',')
                            {
                                x += desconto[j];
                            }
                        }
                        desconto = x;
                        objVI.vi_desconto = Double.Parse(desconto);

                        objVI.vi_percentual = Double.Parse(dgDados.Rows[i].Cells[7].Value.ToString());
                        
                        objVI.inserir(); //inserir Produtos da Venda

                        if (objVen.ven_tipo == "Venda")
                        {
                            ProdutosBLL objPro = new ProdutosBLL();
                            objPro.localizar(objVI.pro_codigo.ToString(), "pro_codigo");
                            objPro.pro_quantidade = objPro.pro_quantidade - objVI.vi_quantidade;
                            objPro.alterarQuantidade();
                            objPro = null;
                        }
                    }
            }
            catch (Exception)
            {
                
                throw;
            }
        }



        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
                this.Close();
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void Vendas_Load(object sender, EventArgs e)
        {
            try
            {
                limpar();
                txtData.Text = DateTime.Now.ToString();
                txtData.ReadOnly = true;
                carregacombo();
                cbProdutos.SelectedIndex = -1;

                dgDados.Columns.Add("ven_codigo", "Código da Venda");
                dgDados.Columns.Add("pro_codigo", "Código do Produto");
                dgDados.Columns.Add("pro_nome", "Produto");
                dgDados.Columns.Add("vi_quantidade", "Quantidade");
                dgDados.Columns.Add("vi_valorUnitario", "Valor Unitário");
                dgDados.Columns.Add("vi_subtotal", "Subtotal");
                dgDados.Columns.Add("vi_desconto", "Desconto (R$)");
                dgDados.Columns.Add("vi_percentual", "Desconto (%)");

                //this.MaximumSize = new Size(this.Width, this.Height);
                this.MinimumSize = new Size(this.Width, this.Height);
                TabControl1.SelectedIndex = 0;

                //Mostrar Usuário logado e travar
                cbFuncionario.SelectedValue = global.codUsuario;
                cbFuncionario.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtDesconto_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                //keypress
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtDesconto.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtDesconto_Leave(object sender, EventArgs e)
        {
            try
            {
                Double percentual = 1, subtotal = 0, desconto = 0, valorUnitario = 0;
                int quantidade = 0;


                String x = "";
                for (int i = 0; i <= txtDesconto.Text.Length - 1; i++)
                {
                    if ((txtDesconto.Text[i] >= '0' &&
                    txtDesconto.Text[i] <= '9') ||
                    txtDesconto.Text[i] == ',')
                    {
                        x += txtDesconto.Text[i];
                    }
                }
                if (x != "")
                    desconto = Double.Parse(x);
                txtDesconto.Text = x;

                x = "";
                for (int i = 0; i <= txtValorUnitario.Text.Length - 1; i++)
                {
                    if ((txtValorUnitario.Text[i] >= '0' &&
                    txtValorUnitario.Text[i] <= '9') ||
                    txtValorUnitario.Text[i] == ',')
                    {
                        x += txtValorUnitario.Text[i];
                    }
                }
                if (x != "")
                    valorUnitario = Double.Parse(x);

                x = "";
                for (int i = 0; i <= txtSubtotal.Text.Length - 1; i++)
                {
                    if ((txtSubtotal.Text[i] >= '0' &&
                    txtSubtotal.Text[i] <= '9') ||
                    txtSubtotal.Text[i] == ',')
                    {
                        x += txtSubtotal.Text[i];
                    }
                }
                if (x != "")
                    subtotal = Double.Parse(x);

                if (txtQuantidade.Text != "")
                    quantidade = int.Parse(txtQuantidade.Text);

                txtPercentual.Text = ((desconto * 100) / (valorUnitario*quantidade)).ToString();
                percentual = Double.Parse(txtPercentual.Text);
                subtotal = valorUnitario*quantidade - desconto;
                txtSubtotal.Text = Convert.ToDouble(subtotal).ToString("C");
                //txtDesconto.Text = Convert.ToDouble(valorUnitario * percentual / 100).ToString("C");


                if (txtDesconto.Text != "")
                    txtDesconto.Text = Convert.ToDouble(txtDesconto.Text).ToString("C");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
            


        }

        private void txtDesconto_Enter(object sender, EventArgs e)
        {
            String x = "";
            for (int i = 0; i <= txtDesconto.Text.Length - 1; i++)
            {
                if ((txtDesconto.Text[i] >= '0' &&
                txtDesconto.Text[i] <= '9') ||
                txtDesconto.Text[i] == ',')
                {
                    x += txtDesconto.Text[i];
                }
            }
            txtDesconto.Text = x;
            txtDesconto.SelectAll();
        }

        private void btSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                //String statusImpressora = "Pronta";
                if (txtCodigo.Text == "")
                {
                    //Carregar os campos no objeto
                    String novaVenda = "Não";
                    if (cbTipoVenda.SelectedIndex == 0)
                    {
                        carregaPropriedades();
                        if (objVen.forma_pagamento == 0)
                            throw new Exception("Venda Cancelada");
                        if (objVen.ven_tipo == "Venda")
                            novaVenda = "Sim";
                    }
                    else
                    {
                        String condicional = "";
                        if (objVen.ven_tipo != "Venda") //A venda está na condicional?
                            condicional = "Sim"; 

                        carregaPropriedadesCondicional(); //Carrega as propriedades da venda alteradas pelo usuário
                        
                        if (objVen.ven_tipo == "Venda") // Se a venda passou de condicional para venda
                        {
                            if(condicional == "Sim") //Realizar a nova venda e fazer surgir o cupom fiscal
                                novaVenda = "Sim";
                        }
                    }
                    
                    //Verificar limite mensal e total do Cliente
                    int limite = 0;
                    String permite = "Não";
                    DataTable tab = objVen.verificaLimiteClienteMensal(objVen.cliente);
                    if (tab.Rows.Count > 0)
                        limite = 1;
                    
                    tab = objVen.verificaLimiteClienteTotal(objVen.cliente);
                    if (tab.Rows.Count > 0)
                        limite = 2;                    

                    if(limite == 1) //Limite Mensal
                    {
                        
                        if (MessageBox.Show("O limite de crédito mensal do cliente não permite que a venda seja realizada. Deseja continuar mesmo assim?", "Continuar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                        {
                            verificacaoUsuario frm = new verificacaoUsuario();
                            frm.ShowDialog();
                            if (frm.permissao != "Gerente")
                                throw new Exception("Permissão de venda não concedida. Venda Cancelada");
                            frm = null;
                            permite = "Sim";
                            limite = 0;
                        }
                    }

                    else if (limite == 2) //Limite Total
                    {
                        if (MessageBox.Show("O limite de crédito total do cliente não permite que a venda seja realizada. Deseja continuar mesmo assim?", "Continuar?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                        {
                            verificacaoUsuario frm = new verificacaoUsuario();
                            frm.ShowDialog();
                            if(frm.permissao != "Gerente")
                                throw new Exception("Permissão de venda não concedida. Venda Cancelada");
                            frm = null;
                            permite = "Sim";
                            limite = 0;
                        }
                    }
                    //ClienteBLL objCli = new ClienteBLL();
                    //objCli.localizar(cbCliente.SelectedValue.ToString(), "cli_codigo");
                    //if (objVen.valorFinal > objCli.cli_limiteCredito || objVen.valorFinal > objCli.cli_limiteMensal)
                    //    throw new Exception("O limite de crédito do cliente não permite que a venda seja realizada");
                    //objCli = null;
                    if (limite != 1 && limite != 2)
                    {
                        permite = "Sim"; //Cliente Não ultrapassou o limite ou o gerente permitiu a venda
                        if (permite == "Sim")
                        {
                            objVen.inserir(); //Venda
                            insereProdutosVenda(); //Produtos das Venda

                            //Contas a receber                    
                            if (cbTipoVenda.SelectedIndex == 0)
                            {
                                FormaPagamentoBLL objFP = new FormaPagamentoBLL();
                                objFP.localizar(objVen.forma_pagamento.ToString(), "fp_codigo");
                                if (objFP.fp_descricao != "Dinheiro")
                                {
                                    ContasAReceberBLL objCR = new ContasAReceberBLL();
                                    objCR.vendas = objVen.codigo;
                                    objCR.excluirVenda();
                                    objCR = null;
                                    for (int i = 1; i <= objVen.parcelas; i++)
                                    {
                                        objCR = new ContasAReceberBLL();

                                        objCR.vendas = objVen.codigo;
                                        DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                        objCR.vencimento = dtDataInicial.AddMonths(i);
                                        if (i == 1)
                                        {
                                            Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                            if (valor * objVen.parcelas < objVen.valorFinal)
                                            {
                                                objCR.original = valor + 0.01;
                                                objCR.alterado = valor + 0.01;
                                            }
                                            else if (valor * objVen.parcelas > objVen.valorFinal)
                                            {
                                                objCR.original = valor - 0.01;
                                                objCR.alterado = valor - 0.01;
                                            }
                                            else
                                            {
                                                objCR.original = valor;
                                                objCR.alterado = valor;
                                            }
                                        }
                                        else
                                        {
                                            objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                            objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        }
                                        objCR.pago = 0;
                                        objCR.status = "Aberto";
                                        objCR.pagamento = null;
                                        objCR.juros = 0;
                                        objCR.desconto = 0;
                                        objCR.observacao = "";
                                        objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                        //objCR.duplicata = "";

                                        objCR.inserir();
                                        objCR = null;
                                    }
                                }
                                else //Pagamento A Vista
                                {
                                    ContasAReceberBLL objCR = new ContasAReceberBLL();
                                    objCR.vendas = objVen.codigo;
                                    objCR.excluirVenda();
                                    objCR = null;
                                    for (int i = 1; i <= objVen.parcelas; i++)
                                    {
                                        objCR = new ContasAReceberBLL();

                                        objCR.vendas = objVen.codigo;
                                        DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                        objCR.vencimento = dtDataInicial.AddMonths(i - 1);
                                        if (i == 1)
                                        {
                                            Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                            if (valor * objVen.parcelas < objVen.valorFinal)
                                            {
                                                objCR.original = valor + 0.01;
                                                objCR.alterado = valor + 0.01;
                                            }
                                            else if (valor * objVen.parcelas > objVen.valorFinal)
                                            {
                                                objCR.original = valor - 0.01;
                                                objCR.alterado = valor - 0.01;
                                            }
                                            else
                                            {
                                                objCR.original = valor;
                                                objCR.alterado = valor;
                                            }
                                        }
                                        else
                                        {
                                            objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                            objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        }
                                        objCR.pago = objCR.original;
                                        objCR.status = "Pago";
                                        objCR.pagamento = DateTime.Now.Date;
                                        objCR.juros = 0;
                                        objCR.desconto = 0;
                                        objCR.observacao = "";
                                        objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                        //objCR.duplicata = "";

                                        objCR.inserir();

                                        PagamentoDiaBLL objPD = new PagamentoDiaBLL();
                                        objPD.cr_codigo = objCR.codigo;
                                        objPD.pd_data = DateTime.Now.Date;
                                        objPD.pd_valor = objCR.alterado;
                                        objPD.inserir();
                                        objPD = null;

                                        objCR = null;
                                    }
                                }

                                if (novaVenda == "Sim")
                                {
                                    //RELATORIOS.frm_Relatorio frm = new RELATORIOS.frm_Relatorio();
                                    //frm.controle = "Cupom Não Fiscal";
                                    //frm.venda = objVen.codigo;
                                    //frm.ShowDialog();
                                    //frm = null;

                                    //tentarImpressao: //Abrir tela de escolha da impressora
                                    //    MOVIMENTACOES.Escolher_Impressora frmImpressora = new MOVIMENTACOES.Escolher_Impressora();
                                    //    frmImpressora.ShowDialog();
                                    //    if (frmImpressora.iRetorno == 0)
                                    //    {
                                    //        if (MessageBox.Show("Erro ao conectar com a impressora. Deseja tentar novamente?", "Erro na impressão", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                                    //        {
                                    //            frmImpressora = null;
                                    //            goto tentarImpressao;
                                    //        }
                                    //    }
                                    //if (frmImpressora.iRetorno> 0)
                                    //{


                                    //DataTable tabCupom = objVen.FormarCupom(objVen.codigo);

                                    //String cupom = "cupom.txt";
                                    //if (System.IO.File.Exists(cupom))
                                    //    System.IO.File.Delete("cupom.txt");

                                    //FileStream f = new FileStream("cupom.txt", FileMode.OpenOrCreate);
                                    //UTF8Encoding utf8 = new UTF8Encoding();

                                    //String textoImpressora;



                                    //textoImpressora = tabCupom.Rows[0]["emp_razaoSocial"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_cnpj"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_logradouro"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_numero"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_bairro"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_cep"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["cid_nome"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_telefone"].ToString() + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["cli_nome"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["cli_cpf"].ToString() + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "Código da Venda: " + objVen.codigo.ToString() + Environment.NewLine;
                                    //textoImpressora += "Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString() + Environment.NewLine;
                                    //textoImpressora += "Total da Venda: " + tabCupom.Rows[0]["Total"].ToString() + Environment.NewLine;
                                    //textoImpressora += "Desconto: " + tabCupom.Rows[0]["Desconto"].ToString() + Environment.NewLine;
                                    //textoImpressora += "Valor Final: " + tabCupom.Rows[0]["Valor Final"].ToString() + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "      Itens da Venda" + Environment.NewLine + Environment.NewLine;
                                    //for (int i = 0; i < tabCupom.Rows.Count; i++)
                                    //{
                                    //    textoImpressora += "Produto:" + tabCupom.Rows[i]["Produto"].ToString() + Environment.NewLine;
                                    //    textoImpressora += "Preço do Produto:" + tabCupom.Rows[i]["Preço Produto"].ToString() + Environment.NewLine;
                                    //    textoImpressora += "Valor Total:" + tabCupom.Rows[i]["Valor Total"].ToString() + Environment.NewLine;
                                    //    textoImpressora += "Desconto:" + tabCupom.Rows[i]["Desconto do Produto"].ToString() + Environment.NewLine;
                                    //    textoImpressora += "Valor Final do Produto:" + tabCupom.Rows[i]["Valor Final do Produto"].ToString() + Environment.NewLine;
                                    //}

                                    //String TotalVenda, Desconto, ValorFinal, ValorUnitario, ValorTotal, Desconto2, Total;
                                    ////TotalVenda = String.Format(tabCupom.Rows[0]["Total"].ToString(), "C");
                                    //TotalVenda = "R$" + Decimal.Parse(tabCupom.Rows[0]["Total"].ToString()).ToString("N2");

                                    //Desconto = "R$" + Decimal.Parse(tabCupom.Rows[0]["Desconto"].ToString()).ToString("N2");
                                    //ValorFinal = "R$" + Decimal.Parse(tabCupom.Rows[0]["Valor Final"].ToString()).ToString("N2");

                                    //textoImpressora = tabCupom.Rows[0]["emp_razaoSocial"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_cnpj"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_logradouro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                                    ////textoImpressora += tabCupom.Rows[0]["emp_numero"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_bairro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                                    ////textoImpressora += tabCupom.Rows[0]["emp_cep"].ToString() + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["cid_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["emp_telefone"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                                    //textoImpressora += tabCupom.Rows[0]["cli_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += tabCupom.Rows[0]["cli_cpf"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                                    //textoImpressora += "Codigo da Venda: " + objVen.codigo.ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "Total da Venda: " + TotalVenda + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "Desconto: " + Desconto + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "Valor Final: " + ValorFinal + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                                    //textoImpressora += "      Itens da Venda" + Environment.NewLine + Environment.NewLine;
                                    //for (int i = 0; i < tabCupom.Rows.Count; i++)
                                    //{
                                    //    textoImpressora += "Produto:" + tabCupom.Rows[i]["Produto"].ToString() + Environment.NewLine + Environment.NewLine;
                                    //    ValorUnitario = "R$" + Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                                    //    textoImpressora += "Valor Unitario:              " + ValorUnitario + Environment.NewLine + Environment.NewLine;
                                    //    ValorTotal = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                                    //    textoImpressora += "Valor Total:                 " + ValorTotal + Environment.NewLine + Environment.NewLine;
                                    //    Desconto2 = "R$" + Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                                    //    textoImpressora += "Desconto:                     " + Desconto2 + Environment.NewLine + Environment.NewLine;
                                    //    Total = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                                    //    textoImpressora += "Total:                       " + Total + Environment.NewLine + Environment.NewLine;
                                    //}

                                    //byte[] bytes = utf8.GetBytes(textoImpressora);
                                    //f.Write(bytes, 0, bytes.Length);
                                    //f.Close();

                                    //ReadFile();
                                    //printDocument1.Print();
                                    //System.IO.File.Delete("cupom.txt");




                                    //int retorno = MP2032.FormataTX(textoImpressora + Environment.NewLine + Environment.NewLine, 2, 0, 0, 0, 0); //+ textoImpressora + "\r\n\r\n"
                                    //if (retorno == 0)
                                    //{
                                    //    if (MessageBox.Show("Erro ao conectar com a impressora. Deseja tentar novamente?", "Erro na impressão", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                                    //    {
                                    //        frmImpressora = null;
                                    //        goto tentarImpressao;
                                    //    }
                                    //}

                                    //arquivo.WriteLine(textoImpressora);
                                    //arquivo.Close();

                                    //retorno = MP2032.AcionaGuilhotina(0);
                                    //if (retorno == 0)
                                    //    MessageBox.Show("Erro ao executar a guilhotina");
                                    //retorno = MP2032.FechaPorta();
                                    //if (retorno == 0)
                                    //    MessageBox.Show("Erro ao fechar a porta da impressora");
                                    //}
                                    // frmImpressora = null;

                                    //    minhaImpressora.Imprimir(textoImpressora);
                                    //    minhaImpressora.CortarPapel(true);
                                    //}
                                    if (MessageBox.Show("Deseja imprimir o recibo?", "Recibo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                                        ImprimeImpressora();
                                }
                                objVen.limpar();
                                objVI.limpar();
                                limpar();
                                objFP = null;

                                MessageBox.Show("Venda realizada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            }
                            else
                            {
                                MessageBox.Show("Venda em condicional realizada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                ImprimeCondicional();
                            }
                        }
                    }
                }
                else //Alteração
                {
                    carregaPropriedadesAlterar();
                    objVen.alterar();
                    insereProdutosVenda();

                    if (cbTipoVenda.SelectedIndex == 0)
                    {
                        FormaPagamentoBLL objFP = new FormaPagamentoBLL();
                        objFP.localizar(objVen.forma_pagamento.ToString(), "fp_codigo");
                        if (objFP.fp_descricao != "Dinheiro")
                        {
                            ContasAReceberBLL objCR = new ContasAReceberBLL();
                            objCR.vendas = objVen.codigo;
                            objCR.excluirVenda();
                            objCR = null;
                            for (int i = 1; i <= objVen.parcelas; i++)
                            {
                                objCR = new ContasAReceberBLL();

                                objCR.vendas = objVen.codigo;
                                DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                objCR.vencimento = dtDataInicial.AddMonths(i);
                                if (i == 1)
                                {
                                    Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    if (valor * objVen.parcelas < objVen.valorFinal)
                                    {
                                        objCR.original = valor + 0.01;
                                        objCR.alterado = valor + 0.01;
                                    }
                                    else if (valor * objVen.parcelas > objVen.valorFinal)
                                    {
                                        objCR.original = valor - 0.01;
                                        objCR.alterado = valor - 0.01;
                                    }
                                    else
                                    {
                                        objCR.original = valor;
                                        objCR.alterado = valor;
                                    }
                                }
                                else
                                {
                                    objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                }
                                objCR.pago = 0;
                                objCR.status = "Aberto";
                                objCR.pagamento = null;
                                objCR.juros = 0;
                                objCR.desconto = 0;
                                objCR.observacao = "";
                                objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                //objCR.duplicata = "";

                                objCR.inserir();
                                objCR = null;
                            }
                        }
                        else
                        {
                            ContasAReceberBLL objCR = new ContasAReceberBLL();
                            objCR.vendas = objVen.codigo;
                            objCR.excluirVenda();
                            objCR = null;
                            for (int i = 1; i <= objVen.parcelas; i++)
                            {
                                objCR = new ContasAReceberBLL();

                                objCR.vendas = objVen.codigo;
                                DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                objCR.vencimento = dtDataInicial.AddMonths(i - 1);
                                if (i == 1)
                                {
                                    Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    if (valor * objVen.parcelas < objVen.valorFinal)
                                    {
                                        objCR.original = valor + 0.01;
                                        objCR.alterado = valor + 0.01;
                                    }
                                    else if (valor * objVen.parcelas > objVen.valorFinal)
                                    {
                                        objCR.original = valor - 0.01;
                                        objCR.alterado = valor - 0.01;
                                    }
                                    else
                                    {
                                        objCR.original = valor;
                                        objCR.alterado = valor;
                                    }
                                }
                                else
                                {
                                    objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                }
                                objCR.pago = objCR.original;
                                objCR.status = "Pago";
                                objCR.pagamento = DateTime.Now.Date;
                                objCR.juros = 0;
                                objCR.desconto = 0;
                                objCR.observacao = "";
                                objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                //objCR.duplicata = "";

                                objCR.inserir();
                                objCR = null;
                            }
                        }
                        objVen.limpar();
                        objVI.limpar();
                        limpar();
                        objFP = null;
                        MessageBox.Show("Venda alterada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                objVen.limpar();
                objVI.limpar();
                limpar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtValorUnitario_Enter(object sender, EventArgs e)
        {
            String x = "";
            for (int i = 0; i <= txtValorUnitario.Text.Length - 1; i++)
            {
                if ((txtValorUnitario.Text[i] >= '0' &&
                txtValorUnitario.Text[i] <= '9') ||
                txtValorUnitario.Text[i] == ',')
                {
                    x += txtValorUnitario.Text[i];
                }
            }
            txtValorUnitario.Text = x;
            txtValorUnitario.SelectAll();
        }

        private void txtValorUnitario_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                //keypress
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtValorUnitario.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtValorUnitario_Leave(object sender, EventArgs e)
        {
            if (txtValorUnitario.Text != "")
                txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
        }

        private void txtQuantidade_TextChanged(object sender, EventArgs e)
        {
            if (txtQuantidade.Text != "" && txtValorUnitario.Text != "")
            {
                String x = "";
                for (int i = 0; i <= txtValorUnitario.Text.Length - 1; i++)
                {
                    if ((txtValorUnitario.Text[i] >= '0' &&
                    txtValorUnitario.Text[i] <= '9') ||
                    txtValorUnitario.Text[i] == ',')
                    {
                        x += txtValorUnitario.Text[i];
                    }
                }
                txtValorUnitario.Text = x;

                int qtd = int.Parse(txtQuantidade.Text);
                Double valorUnitario = Double.Parse(txtValorUnitario.Text);
                Double subtotal = qtd * valorUnitario;


                txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                txtSubtotal.ReadOnly = false;
                txtSubtotal.Text = subtotal.ToString();
                txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                txtSubtotal.ReadOnly = true;
            }
            else
            {
                txtSubtotal.Text = "0";
                txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                if (txtQuantidade.Text == "")
                {
                    txtQuantidade.Text = "0";
                    txtQuantidade.SelectAll();
                }
            }

            if (txtPercentual.Text != "")
                txtPercentual_Leave(sender, e);
            else if (txtDesconto.Text != "")
                txtDesconto_Leave(sender, e);
            
        }

        private void txtPercentual_Leave(object sender, EventArgs e)
        {
            try
            {

                Double percentual=0, desconto=0,subtotal=0, valorUnitario=0;
                int quantidade = 0;
                if (txtPercentual.Text != "")
                    percentual = Double.Parse(txtPercentual.Text);
                String x = "";
                for (int i = 0; i <= txtDesconto.Text.Length - 1; i++)
                {
                    if ((txtDesconto.Text[i] >= '0' &&
                    txtDesconto.Text[i] <= '9') ||
                    txtDesconto.Text[i] == ',')
                    {
                        x += txtDesconto.Text[i];
                    }
                }
                if(x != "")
                    desconto = Double.Parse(x);


                x = "";
                for (int i = 0; i <= txtValorUnitario.Text.Length - 1; i++)
                {
                    if ((txtValorUnitario.Text[i] >= '0' &&
                    txtValorUnitario.Text[i] <= '9') ||
                    txtValorUnitario.Text[i] == ',')
                    {
                        x += txtValorUnitario.Text[i];
                    }
                }
                if (x != "")
                    valorUnitario = Double.Parse(x);

                x = "";
                for (int i = 0; i <= txtSubtotal.Text.Length - 1; i++)
                {
                    if ((txtSubtotal.Text[i] >= '0' &&
                    txtSubtotal.Text[i] <= '9') ||
                    txtSubtotal.Text[i] == ',')
                    {
                        x += txtSubtotal.Text[i];
                    }
                }
                if (x != "")
                    subtotal = Double.Parse(x);
                
                if (txtQuantidade.Text != "")
                    quantidade = int.Parse(txtQuantidade.Text);

                    subtotal = valorUnitario * quantidade - valorUnitario * quantidade * percentual / 100;
                    desconto = valorUnitario * quantidade - subtotal;
                    //subtotal *= quantidade;
                    txtSubtotal.Text = Convert.ToDouble(subtotal).ToString("C");
                    txtDesconto.Text = Convert.ToDouble(desconto).ToString("C");
                    
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtQuantidade_Leave(object sender, EventArgs e)
        {
            try
            {

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void btIncluirProduto_Click(object sender, EventArgs e)
        {
            try
            {
                String achou = "";

                String x = "";
                for (int j = 0; j <= txtValorUnitario.Text.Length - 1; j++)
                {
                    if ((txtValorUnitario.Text[j] >= '0' &&
                    txtValorUnitario.Text[j] <= '9') ||
                    txtValorUnitario.Text[j] == ',')
                    {
                        x += txtValorUnitario.Text[j];
                    }
                }
                txtValorUnitario.Text = x;

                x = "";
                for (int j = 0; j <= txtSubtotal.Text.Length - 1; j++)
                {
                    if ((txtSubtotal.Text[j] >= '0' &&
                    txtSubtotal.Text[j] <= '9') ||
                    txtSubtotal.Text[j] == ',')
                    {
                        x += txtSubtotal.Text[j];
                    }
                }
                txtSubtotal.Text = x;

                if (cbProdutos.SelectedValue == null)
                    throw new Exception("Produto não encontrado na base de dados");

                if (txtValorUnitario.Text == "")
                    throw new Exception("O valor unitário deve possuir um valor numérico");

                if (txtQuantidade.Text == "" || txtQuantidade.Text.Equals("0"))
                    throw new Exception("O campo quantidade deve possuir um número inteiro maior que 0");

                if (txtSubtotal.Text == "" || txtSubtotal.Text.Equals("R$ 0,00"))
                    throw new Exception("O campo subtotal deve possui um número real maior que 0");
                if (txtDesconto.Text == "")
                    txtDesconto.Text = "0";
                if (txtPercentual.Text == "")
                    txtPercentual.Text = "0";

                //Verificar se já existe o produto inserido
                for (int i = 0; i < dgDados.Rows.Count; i++)
                {
                    if (dgDados.Rows[i].Cells[1].Value.ToString() == cbProdutos.SelectedValue.ToString())
                    {
                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizarLeave(cbProdutos.SelectedValue.ToString(), "pro_codigo");

                        if (dgDados.Rows[i].Cells[7].Value.ToString() != txtPercentual.Text)
                            throw new Exception("O desconto não pode ser alterado uma vez que o produto já tenha sido inserido na grade");
                        int qtd = int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());
                        String subtotal = "";
                        if (int.Parse(dgDados.Rows[i].Cells[3].Value.ToString()) == int.Parse(txtQuantidadeTotal.Text))
                            throw new Exception("Não é possível adicionar mais " + objPro.pro_nome + ", pois a quantidade chegou ao máximo");
                        dgDados.Rows[i].Cells[3].Value = qtd + int.Parse(txtQuantidade.Text);
                        subtotal = Convert.ToString(Double.Parse(txtSubtotal.Text) / int.Parse(txtQuantidade.Text));
                        subtotal = (int.Parse(dgDados.Rows[i].Cells[3].Value.ToString()) * Double.Parse(subtotal)).ToString();
                        subtotal = Convert.ToDouble(subtotal).ToString("C");
                        dgDados.Rows[i].Cells[5].Value = subtotal;

                        x = "";
                        for (int j = 0; j <= txtDesconto.Text.Length - 1; j++)
                        {
                            if ((txtDesconto.Text[j] >= '0' &&
                            txtDesconto.Text[j] <= '9') ||
                            txtDesconto.Text[j] == ',')
                            {
                                x += txtDesconto.Text[j];
                            }
                        }
                        txtDesconto.Text= x;

                        x = "";
                        for (int j = 0; j <= dgDados.Rows[i].Cells[6].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados.Rows[i].Cells[6].Value.ToString()[j] >= '0' &&
                            dgDados.Rows[i].Cells[6].Value.ToString()[j] <= '9') ||
                            dgDados.Rows[i].Cells[6].Value.ToString()[j] == ',')
                            {
                                x += dgDados.Rows[i].Cells[6].Value.ToString()[j];
                            }
                        }
                        dgDados.Rows[i].Cells[6].Value = x;

                        dgDados.Rows[i].Cells[6].Value = Convert.ToString(Double.Parse(txtDesconto.Text) + Double.Parse(dgDados.Rows[i].Cells[6].Value.ToString()));

                        dgDados.Rows[i].Cells[6].Value = Convert.ToDouble(dgDados.Rows[i].Cells[6].Value).ToString("C");
                        txtDesconto.Text = Convert.ToDouble(txtDesconto.Text).ToString("C");
                        achou = "Sim";
                    }
                }


                if (achou == "Sim")
                {
                    Double total = 0;
                    for (int k = 0; k < dgDados.Rows.Count; k++)
                    {
                        String subtotal = dgDados.Rows[k].Cells[5].Value.ToString();

                        x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;

                        total += Double.Parse(subtotal);
                    }
                    txtValorTotal.Text = total.ToString();
                    txtValorTotal.Text = Convert.ToDouble(txtValorTotal.Text).ToString("C");
                    txtTotalFinal.Text = total.ToString();
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                    
                }

                //Primeira vez que está inserindo o produto
                if (achou != "Sim")
                {
                    if (txtCodigo.Text != "")
                    {
                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizar(cbProdutos.SelectedValue.ToString(), "pro_codigo");
                        if (int.Parse(txtQuantidade.Text) > int.Parse(txtQuantidadeTotal.Text))
                            throw new Exception("Não é possível adicionar esta quantidade ao produto " + objPro.pro_nome);                            
                        dgDados.Rows.Add(txtCodigo.Text, cbProdutos.SelectedValue.ToString(), objPro.pro_nome, txtQuantidade.Text, Convert.ToDouble(txtValorUnitario.Text).ToString("C"), Convert.ToDouble(txtSubtotal.Text).ToString("C"), txtDesconto.Text, txtPercentual.Text);

                        objPro = null;

                    }
                    else
                    {
                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizar(cbProdutos.SelectedValue.ToString(), "pro_codigo");
                        if (int.Parse(txtQuantidade.Text) > int.Parse(txtQuantidadeTotal.Text))
                            throw new Exception("Não é possível adicionar esta quantidade ao produto " + objPro.pro_nome);            
                        dgDados.Rows.Add("", cbProdutos.SelectedValue.ToString(), objPro.pro_nome, txtQuantidade.Text, Convert.ToDouble(txtValorUnitario.Text).ToString("C"), Convert.ToDouble(txtSubtotal.Text).ToString("C"), txtDesconto.Text, txtPercentual.Text);

                        objPro = null;
                    }

                    Double total = 0;
                    for (int k = 0; k < dgDados.Rows.Count; k++)
                    {

                        String valorUnitario = dgDados.Rows[k].Cells[5].Value.ToString();

                        x = "";
                        for (int j = 0; j <= valorUnitario.Length - 1; j++)
                        {
                            if ((valorUnitario[j] >= '0' &&
                            valorUnitario[j] <= '9') ||
                            valorUnitario[j] == ',')
                            {
                                x += valorUnitario[j];
                            }
                        }
                        valorUnitario = x;


                        String subtotal = Double.Parse(valorUnitario).ToString();

                        //total += int.Parse(dgDados.Rows[k].Cells[4].Value.ToString()) * Double.Parse(subtotal);
                        total += Double.Parse(subtotal);
                    }
                    txtValorTotal.Text = total.ToString();
                    txtValorTotal.Text = Convert.ToDouble(txtValorTotal.Text).ToString("C");
                    txtTotalFinal.Text = total.ToString();
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    
                    txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");


                }
                int qtdade = 0;
                for (int i = 0; i < dgDados.Rows.Count; i++)
                    qtdade += int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());

                txtTotalItens.Text = qtdade.ToString();
                
                txtDescontoPercentual.Text = "";
                txtDescontoValor.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void cbProdutos_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                if (cbProdutos.Text == "" || cbProdutos.Text == "System.Data.DataRowView")
                    objPro.localizarLeave("0", "pro_codigo");
                else
                {
                    objPro.localizarLeave(cbProdutos.Text, "pro_nome");
                    txtQuantidadeTotal.Text = objPro.pro_quantidade.ToString();
                }

                if (objPro.pro_codigo != 0)
                {
                    txtCodigoBarra.Text = objPro.pro_codigoBarra;
                    txtValorUnitario.Enabled = true;
                    txtQuantidade.Enabled = true;

                    txtValorUnitario.Text = objPro.pro_precoVenda.ToString();
                    if (txtQuantidade.Text != "")
                    {
                        int qtd = int.Parse(txtQuantidade.Text);
                        Double valorUnitario = Double.Parse(txtValorUnitario.Text);
                        Double Subtotal = qtd * valorUnitario;

                        txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                        txtSubtotal.ReadOnly = false;
                        txtSubtotal.Text = Subtotal.ToString();
                        txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                        txtSubtotal.ReadOnly = true;
                    }
                    else if (txtValorUnitario.Text != "")
                        txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                }
                else
                {
                    txtValorUnitario.Text = "";
                    txtQuantidade.Text = "";
                    txtValorUnitario.Enabled = false;
                    txtQuantidade.Enabled = false;
                    txtCodigoBarra.Text = "";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btExcluirProduto_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgDados.CurrentRow != null)
                {
                    this.dgDados.Rows.Remove(this.dgDados.CurrentRow);
                    if (dgDados.Rows.Count > 0)
                    {
                        Double total = 0;
                        for (int k = 0; k < dgDados.Rows.Count; k++)
                        {
                            String subtotal = dgDados.Rows[k].Cells[5].Value.ToString();

                            String x = "";
                            for (int j = 0; j <= subtotal.Length - 1; j++)
                            {
                                if ((subtotal[j] >= '0' &&
                                subtotal[j] <= '9') ||
                                subtotal[j] == ',')
                                {
                                    x += subtotal[j];
                                }
                            }
                            subtotal = x;

                            //total += int.Parse(dgDados.Rows[k].Cells[4].Value.ToString()) * Double.Parse(subtotal);
                            total += Double.Parse(subtotal);
                        }
                        txtValorTotal.Text = total.ToString();
                        txtValorTotal.Text = Convert.ToDouble(txtValorTotal.Text).ToString("C");
                        txtTotalFinal.Text = total.ToString();
                        txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");

                        // txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                    }
                    else
                    {
                        txtValorTotal.Text = "0";
                        txtValorTotal.Text = Convert.ToDouble(txtValorTotal.Text).ToString("C");
                        txtTotalFinal.Text = "0";
                        txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    }
                }

                int qtdade = 0;
                for (int i = 0; i < dgDados.Rows.Count; i++)
                    qtdade += int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());

                txtTotalItens.Text = qtdade.ToString();

                txtDescontoPercentual.Text = "";
                txtDescontoValor.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtDescontoPercentual_Leave(object sender, EventArgs e)
        {
            try
            {
                Double percentual = 0, desconto = 0, subtotal = 0, valorTotal = 0;
                int quantidade = 0;
                if (txtDescontoPercentual.Text != "")
                    percentual = Double.Parse(txtDescontoPercentual.Text);
                String x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                if (x != "")
                    desconto = Double.Parse(x);


                x = "";
                for (int i = 0; i <= txtValorTotal.Text.Length - 1; i++)
                {
                    if ((txtValorTotal.Text[i] >= '0' &&
                    txtValorTotal.Text[i] <= '9') ||
                    txtValorTotal.Text[i] == ',')
                    {
                        x += txtValorTotal.Text[i];
                    }
                }
                if (x != "")
                    valorTotal = Double.Parse(x);

                if (txtQuantidade.Text != "")
                    quantidade = int.Parse(txtQuantidade.Text);

                subtotal = valorTotal - valorTotal * percentual / 100;
                txtTotalFinal.Text = Convert.ToDouble(subtotal).ToString("C");
                txtDescontoValor.Text = Convert.ToDouble(valorTotal * percentual / 100).ToString("C");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtDescontoValor_Leave(object sender, EventArgs e)
        {
            try
            {
                Double percentual = 1, subtotal = 0, desconto = 0, ValorTotal = 0;
                int quantidade = 0;


                String x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                if (x != "")
                    desconto = Double.Parse(x);
                txtDescontoValor.Text = x;

                x = "";
                for (int i = 0; i <= txtValorTotal.Text.Length - 1; i++)
                {
                    if ((txtValorTotal.Text[i] >= '0' &&
                    txtValorTotal.Text[i] <= '9') ||
                    txtValorTotal.Text[i] == ',')
                    {
                        x += txtValorTotal.Text[i];
                    }
                }
                if (x != "")
                    ValorTotal = Double.Parse(x);

                if (txtQuantidade.Text != "")
                    quantidade = int.Parse(txtQuantidade.Text);

                txtDescontoPercentual.Text = (desconto * 100 / ValorTotal).ToString();
                percentual = Double.Parse(txtDescontoPercentual.Text);
                subtotal = ValorTotal - ValorTotal * percentual / 100;
                txtTotalFinal.Text = Convert.ToDouble(subtotal).ToString("C");
                
                txtDescontoPercentual.Text = Math.Round(Double.Parse(txtDescontoPercentual.Text), 2).ToString();

                if (txtDescontoValor.Text != "")
                    txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");

                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtDescontoValor_Enter(object sender, EventArgs e)
        {
            String x = "";
            for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
            {
                if ((txtDescontoValor.Text[i] >= '0' &&
                txtDescontoValor.Text[i] <= '9') ||
                txtDescontoValor.Text[i] == ',')
                {
                    x += txtDescontoValor.Text[i];
                }
            }
            txtDescontoValor.Text = x;
            txtDescontoValor.SelectAll();
        }

        private void txtDescontoValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtDescontoValor.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPercentual_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtPercentual.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtDescontoPercentual_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtDescontoPercentual.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtPercentual_Enter(object sender, EventArgs e)
        {
            txtPercentual.SelectAll();
        }

        private void txtDescontoPercentual_Enter(object sender, EventArgs e)
        {
            txtDescontoPercentual.SelectAll();
        }

        private void btPrimeiro_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedadesAntProxPrimUlt();
                else
                    limpar();
                objVen.localizarPrimeiroUltimo("primeiro");
                if (objVen.codigo != 0)
                {
                    objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedadesAntProxPrimUlt();
                else
                    limpar();
                if (txtCodigo.Text == "")
                    objVen.localizarProxAnterior("anterior", 0);
                else
                    objVen.localizarProxAnterior("anterior", int.Parse(txtCodigo.Text));
                if (objVen.codigo != 0)
                {
                    objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btProximo_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedadesAntProxPrimUlt();
                else
                    limpar();
                if (txtCodigo.Text == "")
                    objVen.localizarProxAnterior("proximo", 0);
                else
                    objVen.localizarProxAnterior("proximo", int.Parse(txtCodigo.Text));
                if (objVen.codigo != 0)
                {
                    objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }   
        }

        private void btUltimo_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text != "")
                    carregaPropriedadesAntProxPrimUlt();
                else
                    limpar();
                objVen.localizarPrimeiroUltimo("ultimo");
                if (objVen.codigo != 0)
                {
                    objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                    carregaCampos();
                    txtCodigo.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtCodigo_Leave(object sender, EventArgs e)
        {
            try
            {
                // Localizar usuário
                int cod;
                int.TryParse(txtCodigo.Text, out cod);
                if (cod != 0)
                {
                    objVen.limpar();
                    objVen.localizarLeave(cod.ToString(), "ven_codigo");
                    if (objVen.codigo != 0)
                    {
                        carregaCampos();
                        txtCodigo.Enabled = false;
                    }
                    else
                        limpar();
                }
                else
                    limpar();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void TabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (TabControl1.SelectedIndex == 1)
                {
                    objVen.limpar();
                    limpar();
                    carregaGrid();
                    txtPesquisar.Focus();
                    //this.MaximumSize = new Size(this.Width, this.Height + 100);
                    //this.MinimumSize = new Size(this.Width, this.Height + 100);
                    //this.Size = new Size(this.Width, this.Height + 100);
                    //this.Location = new System.Drawing.Point(this.Location.X, this.Location.Y-100);   
                    btAnterior.Enabled = false;
                    btPrimeiro.Enabled = false;
                    btProximo.Enabled = false;
                    btUltimo.Enabled = false;
                }
                else if (TabControl1.SelectedIndex == 0)
                {
                    objVen.limpar();
                    //this.MaximumSize = new Size(this.Width, this.Height - 50);
                    //this.MinimumSize = new Size(this.Width, this.Height - 50);
                    //this.Size = new Size(this.Width, this.Height - 50);
                    //this.Location = new System.Drawing.Point(this.Location.X, this.Location.Y+100);
                    btAnterior.Enabled = true;
                    btPrimeiro.Enabled = true;
                    btProximo.Enabled = true;
                    btUltimo.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void gvPesquisa_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1 && e.RowIndex < gvPesquisa.Rows.Count)
                {
                    int cod = 0;
                    cod = int.Parse(gvPesquisa.Rows[e.RowIndex].Cells[0].Value.ToString());
                    if (cod != 0)
                    {
                        TabControl1.SelectedIndex = 0;
                        txtPesquisar.Text = "";
                        objVen.codigo = cod;
                        objVen.localizar(objVen.codigo.ToString(), "ven_codigo");
                        txtCodigo.Text = objVen.codigo.ToString();
                        txtCodigo.Enabled = false;
                        carregaCampos();
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtPesquisar_TextChanged(object sender, EventArgs e)
        {
            try
            {
                carregaGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void gvPesquisa_Sorted(object sender, EventArgs e)
        {
            try
            {
                stiloGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }   
        }

        private void gvPesquisa_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1 && e.RowIndex < gvPesquisa.Rows.Count)
                {
                    objVen.localizar(gvPesquisa.Rows[e.RowIndex].Cells[0].Value.ToString(), "ven_codigo");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void cbRenovarVenda_CheckedChanged(object sender, EventArgs e)
        {
            if (cbRenovarVenda.Checked)
                objVen.ven_status = "Ativo";
            else
                objVen.ven_status = "Cancelado";
        }

        private void btExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                if (objVen.codigo != 0)
                {
                    if (global.permissao != "Gerente" && global.codUsuario != objVen.usuario)
                        throw new Exception("Você não tem permissão para cancelar esta venda");


                    if (MessageBox.Show("Deseja realmente cancelar esta venda?", "Cancelar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes)
                    {
                        objVen.ven_status = "Cancelado";
                        objVen.cancelarVenda();

                        DataTable tab = objVI.localizarComRetorno(objVen.codigo.ToString(), "ven_codigo");

                        for (int i = 0; i < tab.Rows.Count; i++)
                        {
                            
                            objVI.pro_codigo = int.Parse(tab.Rows[i][1].ToString());
                            objVI.vi_quantidade = int.Parse(tab.Rows[i][2].ToString());

                            ProdutosBLL objPro = new ProdutosBLL();
                            objPro.localizar(objVI.pro_codigo.ToString(), "pro_codigo");
                            objPro.pro_quantidade = objPro.pro_quantidade + objVI.vi_quantidade;
                            objPro.alterarQuantidade();
                            objPro = null;
                        }

                        ContasAReceberBLL objCR = new ContasAReceberBLL();
                        objCR.vendas = int.Parse(tab.Rows[0][0].ToString());
                        objCR.excluirVenda();
                        objCR = null;
                       


                        objVen.limpar();
                        objVI.limpar();
                        limpar();
                        carregaGrid();
                        MessageBox.Show("Venda cancelada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                    MessageBox.Show("Favor selecionar uma Venda na aba 'Pesquisar', ou escolher um código válido para poder cancelar a venda", "Cancelar Venda", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnAlterarTipoVenda_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCodigo.Text == "")
                    throw new Exception("Não é possivel mudar o status de uma venda inexistente");
                MOVIMENTACOES.FormaPagamentoVendas frm = new MOVIMENTACOES.FormaPagamentoVendas();
                frm.ShowDialog();
                if (frm.cancelar)
                    objVen.limpar();
                else
                {
                    objVen.forma_pagamento = frm.formaPagamento;
                    objVen.parcelas = frm.qtdParcelas;
                    objVen.ven_tipo = "Venda";
                
                    frm = null;

                    for (int i = 0; i < dgDados.Rows.Count; i++)
                    {
                        objVI.pro_codigo = int.Parse(dgDados.Rows[i].Cells[1].Value.ToString());
                        objVI.vi_quantidade = int.Parse(dgDados.Rows[i].Cells[3].Value.ToString());

                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizar(objVI.pro_codigo.ToString(), "pro_codigo");
                        objPro.pro_quantidade = objPro.pro_quantidade - objVI.vi_quantidade;
                        objPro.alterarQuantidade();
                        objPro = null;
                    }

                    objVen.alterarTipoVenda();

                    ContasAReceberBLL objCR= new ContasAReceberBLL(); 
                    objCR.vendas = objVen.codigo;
                        objCR.excluirVenda();
                        objCR = null;

                    //Contas a receber                    
                            FormaPagamentoBLL objFP = new FormaPagamentoBLL();
                            objFP.localizar(objVen.forma_pagamento.ToString(), "fp_codigo");
                            if (objFP.fp_descricao != "Dinheiro")
                            {
                                objCR = new ContasAReceberBLL();
                                objCR.vendas = objVen.codigo;
                                objCR.excluirVenda();
                                objCR = null;
                                for (int i = 1; i <= objVen.parcelas; i++)
                                {
                                    objCR = new ContasAReceberBLL();

                                    objCR.vendas = objVen.codigo;
                                    DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                    objCR.vencimento = dtDataInicial.AddMonths(i);
                                    if (i == 1)
                                    {
                                        Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        if (valor * objVen.parcelas < objVen.valorFinal)
                                        {
                                            objCR.original = valor + 0.01;
                                            objCR.alterado = valor + 0.01;
                                        }
                                        else if (valor * objVen.parcelas > objVen.valorFinal)
                                        {
                                            objCR.original = valor - 0.01;
                                            objCR.alterado = valor - 0.01;
                                        }
                                        else
                                        {
                                            objCR.original = valor;
                                            objCR.alterado = valor;
                                        }
                                    }
                                    else
                                    {
                                        objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    }
                                    objCR.pago = 0;
                                    objCR.status = "Aberto";
                                    objCR.pagamento = null;
                                    objCR.juros = 0;
                                    objCR.desconto = 0;
                                    objCR.observacao = "";
                                    objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                    //objCR.duplicata = "";

                                    objCR.inserir();
                                    objCR = null;
                                }
                            }
                            else //Pagamento A Vista
                            {
                                objCR = new ContasAReceberBLL();
                                objCR.vendas = objVen.codigo;
                                objCR.excluirVenda();
                                objCR = null;
                                for (int i = 1; i <= objVen.parcelas; i++)
                                {
                                    objCR = new ContasAReceberBLL();

                                    objCR.vendas = objVen.codigo;
                                    DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                                    objCR.vencimento = dtDataInicial.AddMonths(i - 1);
                                    if (i == 1)
                                    {
                                        Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        if (valor * objVen.parcelas < objVen.valorFinal)
                                        {
                                            objCR.original = valor + 0.01;
                                            objCR.alterado = valor + 0.01;
                                        }
                                        else if (valor * objVen.parcelas > objVen.valorFinal)
                                        {
                                            objCR.original = valor - 0.01;
                                            objCR.alterado = valor - 0.01;
                                        }
                                        else
                                        {
                                            objCR.original = valor;
                                            objCR.alterado = valor;
                                        }
                                    }
                                    else
                                    {
                                        objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                        objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                    }
                                    objCR.pago = objCR.original;
                                    objCR.status = "Pago";
                                    objCR.pagamento = DateTime.Now.Date;
                                    objCR.juros = 0;
                                    objCR.desconto = 0;
                                    objCR.observacao = "";
                                    objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                                    //objCR.duplicata = "";

                                    objCR.inserir();

                                    PagamentoDiaBLL objPD = new PagamentoDiaBLL();
                                    objPD.cr_codigo = objCR.codigo;
                                    objPD.pd_data = DateTime.Now.Date;
                                    objPD.pd_valor = objCR.pago;
                                    objPD.inserir();
                                    objPD = null;

                                    objCR = null;
                                }
                            }
                        //for (int i = 1; i <= objVen.parcelas; i++)
                        //{
                        //    objCR = new ContasAReceberBLL();

                        //    objCR.vendas = objVen.codigo;
                        //    DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                        //    objCR.vencimento = dtDataInicial.AddMonths(i - 1);
                        //    if (i == 1)
                        //    {
                        //        Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                        //        if (valor * objVen.parcelas < objVen.valorFinal)
                        //        {
                        //            objCR.original = valor + 0.01;
                        //            objCR.alterado = valor + 0.01;
                        //        }
                        //        else if (valor * objVen.parcelas > objVen.valorFinal)
                        //        {
                        //            objCR.original = valor - 0.01;
                        //            objCR.alterado = valor - 0.01;
                        //        }
                        //        else
                        //        {
                        //            objCR.original = valor;
                        //            objCR.alterado = valor;
                        //        }
                        //    }
                        //    else
                        //    {
                        //        objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                        //        objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                        //    }
                        //    objCR.pago = 0;
                        //    objCR.status = "Aberto";
                        //    objCR.pagamento = null;
                        //    objCR.juros = 0;
                        //    objCR.desconto = 0;
                        //    objCR.observacao = "";
                        //    objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                        //    //objCR.duplicata = "";

                        //    objCR.inserir();



                        //    objCR = null;
                        //}
                    }

                DataTable tabCupom = objVen.FormarCupom(objVen.codigo);

                String cupom = "cupom.txt";
                if (System.IO.File.Exists(cupom))
                    System.IO.File.Delete("cupom.txt");

                FileStream f = new FileStream("cupom.txt", FileMode.OpenOrCreate);
                UTF8Encoding utf8 = new UTF8Encoding();

                String textoImpressora;
                
                String TotalVenda, Desconto, ValorFinal, ValorUnitario, ValorTotal, Desconto2, Total;
                //TotalVenda = String.Format(tabCupom.Rows[0]["Total"].ToString(), "C");
                TotalVenda = "R$" + Decimal.Parse(tabCupom.Rows[0]["Total"].ToString()).ToString("N2");

                Desconto = "R$" + Decimal.Parse(tabCupom.Rows[0]["Desconto"].ToString()).ToString("N2");
                ValorFinal = "R$" + Decimal.Parse(tabCupom.Rows[0]["Valor Final"].ToString()).ToString("N2");

                textoImpressora = tabCupom.Rows[0]["emp_razaoSocial"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["emp_cnpj"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["emp_logradouro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                //textoImpressora += tabCupom.Rows[0]["emp_numero"].ToString() + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["emp_bairro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                //textoImpressora += tabCupom.Rows[0]["emp_cep"].ToString() + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["cid_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["emp_telefone"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                textoImpressora += tabCupom.Rows[0]["cli_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += tabCupom.Rows[0]["cli_cpf"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                textoImpressora += "Codigo da Venda: " + objVen.codigo.ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += "Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString() + Environment.NewLine + Environment.NewLine;
                textoImpressora += "Total da Venda: " + TotalVenda + Environment.NewLine + Environment.NewLine;
                textoImpressora += "Desconto: " + Desconto + Environment.NewLine + Environment.NewLine;
                textoImpressora += "Valor Final: " + ValorFinal + Environment.NewLine + Environment.NewLine;
                textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                textoImpressora += "      Itens da Venda" + Environment.NewLine + Environment.NewLine;
                for (int i = 0; i < tabCupom.Rows.Count; i++)
                {
                    textoImpressora += "Produto:" + tabCupom.Rows[i]["Produto"].ToString() + Environment.NewLine + Environment.NewLine;
                    ValorUnitario = "R$" + Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                    textoImpressora += "Valor Unitario:              " + ValorUnitario + Environment.NewLine + Environment.NewLine;
                    ValorTotal = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                    textoImpressora += "Valor Total:                 " + ValorTotal + Environment.NewLine + Environment.NewLine;
                    Desconto2 = "R$" + Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                    textoImpressora += "Desconto:                     " + Desconto2 + Environment.NewLine + Environment.NewLine;
                    Total = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                    textoImpressora += "Total:                       " + Total + Environment.NewLine + Environment.NewLine;
                }

                byte[] bytes = utf8.GetBytes(textoImpressora);
                f.Write(bytes, 0, bytes.Length);
                f.Close();

                ReadFile();
                printDocument1.Print();
                System.IO.File.Delete("cupom.txt");


                limpar();
                MessageBox.Show("Venda realizada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtCodigoBarra_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                //if (cbProdutos.Text == "" || cbProdutos.Text == "System.Data.DataRowView")
                   // objPro.localizarLeave("0", "pro_codigo");
              //  else
                //{
                    objPro.localizarLeave(txtCodigoBarra.Text, "pro_codigoBarra");
                    
                //}

                if (objPro.pro_codigo != 0)
                {
                    cbProdutos.SelectedValue = objPro.pro_codigo;
                    txtQuantidadeTotal.Text = objPro.pro_quantidade.ToString();
                    txtValorUnitario.Enabled = true;
                    txtQuantidade.Enabled = true;

                    txtValorUnitario.Text = objPro.pro_precoVenda.ToString();
                    if (txtQuantidade.Text != "")
                    {
                        int qtd = int.Parse(txtQuantidade.Text);
                        Double valorUnitario = Double.Parse(txtValorUnitario.Text);
                        Double Subtotal = qtd * valorUnitario;

                        txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                        txtSubtotal.ReadOnly = false;
                        txtSubtotal.Text = Subtotal.ToString();
                        txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                        txtSubtotal.ReadOnly = true;
                    }
                    else if (txtValorUnitario.Text != "")
                        txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                }
                else
                {
                    cbProdutos.SelectedIndex = -1;
                    txtQuantidadeTotal.Text = "";
                    txtValorUnitario.Text = "";
                    txtQuantidade.Text = "";
                    txtValorUnitario.Enabled = false;
                    txtQuantidade.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
                {
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        public void CupomFiscal()
        {
            try
            {
                
            }
            catch (Exception)
            {
                
                throw;
            }
        }


        public void ImprimeImpressora()
        {
            try
            {
                String impressora = "LPT";
                int tentativa = 0;
                int COM = 0;
                loop:
                ImprimeTexto imp = new ImprimeTexto();
                if (tentativa == 3)
                {
                    COM++;
                    impressora = "COM";
                    imp.Inicio(impressora + COM.ToString());
                }
                else
                {
                    tentativa++;
                    imp.Inicio(impressora + tentativa.ToString());
                }   

                DataTable tabCupom = objVen.FormarCupom(objVen.codigo);

                //String textoImpressora;

                String TotalVenda, Desconto, ValorFinal, ValorUnitario, ValorTotal, Desconto2, Total;
                //TotalVenda = String.Format(tabCupom.Rows[0]["Total"].ToString(), "C");
                TotalVenda = "R$" + Decimal.Parse(tabCupom.Rows[0]["Total"].ToString()).ToString("N2");

                Desconto = "R$" + Decimal.Parse(tabCupom.Rows[0]["Desconto"].ToString()).ToString("N2");
                ValorFinal = "R$" + Decimal.Parse(tabCupom.Rows[0]["Valor Final"].ToString()).ToString("N2");

                //textoImpressora = tabCupom.Rows[0]["emp_razaoSocial"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_cnpj"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_logradouro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                ////textoImpressora += tabCupom.Rows[0]["emp_numero"].ToString() + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_bairro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                ////textoImpressora += tabCupom.Rows[0]["emp_cep"].ToString() + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["cid_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_telefone"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                //textoImpressora += tabCupom.Rows[0]["cli_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["cli_cpf"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                //textoImpressora += "Codigo da Venda: " + objVen.codigo.ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Total da Venda: " + TotalVenda + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Desconto: " + Desconto + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Valor Final: " + ValorFinal + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "      Itens da Venda" + Environment.NewLine + Environment.NewLine;
                //for (int i = 0; i < tabCupom.Rows.Count; i++)
                //{
                //    textoImpressora += "Produto:" + tabCupom.Rows[i]["Produto"].ToString() + Environment.NewLine + Environment.NewLine;
                //    ValorUnitario = "R$" + Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Valor Unitario:              " + ValorUnitario + Environment.NewLine + Environment.NewLine;
                //    ValorTotal = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                //    textoImpressora += "Valor Total:                 " + ValorTotal + Environment.NewLine + Environment.NewLine;
                //    Desconto2 = "R$" + Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Desconto:                     " + Desconto2 + Environment.NewLine + Environment.NewLine;
                //    Total = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Total:                       " + Total + Environment.NewLine + Environment.NewLine;
                //}

                imp.ImpLF(tabCupom.Rows[0]["emp_razaoSocial"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_cnpj"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_logradouro"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_bairro"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["cid_nome"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_telefone"].ToString());
                imp.ImpLF("-------------------------------------");
                imp.ImpLF(tabCupom.Rows[0]["cli_nome"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["cli_cpf"].ToString());
                imp.ImpLF("-------------------------------------");
                imp.ImpLF("Codigo da Venda: " + objVen.codigo.ToString());
                imp.ImpLF("Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString());
                imp.ImpLF("Total da Venda: " + TotalVenda);
                imp.ImpLF("Desconto: " + Desconto);
                imp.ImpLF("Valor Final: " + ValorFinal);
                imp.ImpLF("-------------------------------------");
                imp.ImpLF("      Itens da Venda");
                for (int i = 0; i < tabCupom.Rows.Count; i++)
                {
                    imp.ImpLF("Produto:" + tabCupom.Rows[i]["Produto"].ToString());
                    ValorUnitario = "R$" + Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                    imp.ImpLF("Valor Unitario:              " + ValorUnitario);
                    ValorTotal = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                    imp.ImpLF("Valor Total:                 " + ValorTotal);
                    Desconto2 = "R$" + Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                    imp.ImpLF("Desconto:                     " + Desconto2);
                    Total = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                    imp.ImpLF("Total:                       " + Total);
                }
                imp.Pula(10);
                if (!imp.Fim())
                {
                    //if (tentativa < 3)
                    //{
                    //    imp = null;
                    //    goto loop;
                    //}
                    if (COM < 5)
                    {
                        imp = null;
                        goto loop;
                    }
                    else
                        throw new Exception("Nenhuma impressora foi localizada");
                }
                imp = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            
        }

        public void ImprimeCondicional()
        {
            try
            {
                String impressora = "LPT";
                int tentativa = 0;
                int COM = 0;
                loop:
                    ImprimeTexto imp = new ImprimeTexto();
                if (tentativa == 3)
                {
                    COM++;
                    impressora = "COM";
                    imp.Inicio(impressora + tentativa.ToString());
                }
                else
                {
                    tentativa++;
                    imp.Inicio(impressora + tentativa.ToString());                
                }   

                DataTable tabCupom = objVen.FormarCupom(objVen.codigo);

                String TotalVenda, Desconto, ValorFinal, ValorUnitario;
                //TotalVenda = String.Format(tabCupom.Rows[0]["Total"].ToString(), "C");
                TotalVenda = "R$" + Decimal.Parse(tabCupom.Rows[0]["Total"].ToString()).ToString("N2");

                Desconto = "R$" + Decimal.Parse(tabCupom.Rows[0]["Desconto"].ToString()).ToString("N2");
                ValorFinal = "R$" + Decimal.Parse(tabCupom.Rows[0]["Valor Final"].ToString()).ToString("N2");

                imp.ImpLF(tabCupom.Rows[0]["emp_razaoSocial"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_cnpj"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_logradouro"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_bairro"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["cid_nome"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["emp_telefone"].ToString());
                imp.ImpLF("-------------------------------------");
                imp.ImpLF(tabCupom.Rows[0]["cli_nome"].ToString());
                imp.ImpLF(tabCupom.Rows[0]["cli_cpf"].ToString());
                imp.ImpLF("-------------------------------------");
                imp.ImpLF("Codigo da Condicional: " + objVen.codigo.ToString());
                imp.ImpLF("Data de Empréstimo: " + tabCupom.Rows[0]["Data da Venda"].ToString());
                imp.ImpLF("-------------------------------------");
                imp.ImpLF("      Itens da Condicional");
                for (int i = 0; i < tabCupom.Rows.Count; i++)
                {
                    imp.ImpLF("Produto:" + tabCupom.Rows[i]["Produto"].ToString());
                    ValorUnitario = "R$" + Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                    imp.ImpLF("Valor Unitario:              " + ValorUnitario);
                    //ValorTotal = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                    //imp.ImpLF("Valor Total:                 " + ValorTotal);
                    //Desconto2 = "R$" + Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                    //imp.ImpLF("Desconto:                     " + Desconto2);
                    //Total = "R$" + Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                    //imp.ImpLF("Total:                       " + Total);
                }
                imp.Pula(10);
                if (!imp.Fim())
                {
                    //if (tentativa < 3)
                    //{
                    //    imp = null;
                    //    goto loop;
                    //}
                    if (COM < 5)
                    {
                        imp = null;
                        goto loop;
                    }
                    else
                        throw new Exception("Nenhuma impressora foi localizada");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        static public void ImprimeEmArquivo()
        {
            ImprimeTexto imp = new ImprimeTexto();

            imp.Inicio("exemplo.txt");

            imp.ImpLF("Carlos dos Santos - MVP C#");
            imp.ImpLF("CDS Informática Ltda.");
            imp.ImpLF("-------------------------------------");
            imp.ImpLF("Componente de impressao em modo texto");
            for (int i = 0; i < 5; i++)
            {
                imp.ImpLF("Linha impressa " + i.ToString());
            }
            imp.ImpLF(imp.NegritoOn + "Negrito ligado" + imp.NegritoOff);
            imp.ImpLF(imp.Expandido + "Expandido" + imp.Normal);
            imp.ImpLF(imp.Comprimido + "Comprimido" + imp.Normal);
            imp.Pula(2);
            imp.ImpCol(10, "Coluna 10");
            imp.ImpCol(40, "Coluna 40");
            imp.Pula(2);
            imp.Imp((char)27 + "0");
            imp.ImpLF("8 linha ppp");
            imp.ImpLF("8 linha ppp");
            imp.ImpLF("8 linha ppp");
            imp.Imp((char)27 + "2");
            imp.ImpLF("6 linha ppp");
            imp.ImpLF("6 linha ppp");
            imp.ImpLF("6 linha ppp");
            imp.Pula(10);
            imp.Fim();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //DataTable tabCupom = objVen.FormarCupom(objVen.codigo);
                    //String cupom = "cupom.txt";
                    //if (System.IO.File.Exists(cupom))
                    //    System.IO.File.Delete("cupom.txt");
                //else
                //System.IO.File.Create(cupom).Close();
                //System.IO.TextWriter arquivo = System.IO.File.AppendText(cupom);

                //FileStream f = new FileStream("cupom.txt", FileMode.OpenOrCreate);
                //UTF8Encoding utf8 = new UTF8Encoding();
                
                                        

                //String textoImpressora;

                //String TotalVenda, Desconto, ValorFinal, ValorUnitario, ValorTotal, Desconto2, Total;
                ////TotalVenda = String.Format(tabCupom.Rows[0]["Total"].ToString(), "C");
                //TotalVenda = "R$"+Decimal.Parse(tabCupom.Rows[0]["Total"].ToString()).ToString("N2");

                //Desconto = "R$" + Decimal.Parse(tabCupom.Rows[0]["Desconto"].ToString()).ToString("N2");
                //ValorFinal = "R$"+Decimal.Parse(tabCupom.Rows[0]["Valor Final"].ToString()).ToString("N2");

                //textoImpressora = tabCupom.Rows[0]["emp_razaoSocial"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_cnpj"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_logradouro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                ////textoImpressora += tabCupom.Rows[0]["emp_numero"].ToString() + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_bairro"].ToString() + Environment.NewLine + Environment.NewLine;//"\t";
                ////textoImpressora += tabCupom.Rows[0]["emp_cep"].ToString() + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["cid_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["emp_telefone"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                //textoImpressora += tabCupom.Rows[0]["cli_nome"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += tabCupom.Rows[0]["cli_cpf"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine; //"\n\n";
                //textoImpressora += "Codigo da Venda: " + objVen.codigo.ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Data da Venda: " + tabCupom.Rows[0]["Data da Venda"].ToString() + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Total da Venda: " + TotalVenda + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Desconto: " + Desconto + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "Valor Final: " + ValorFinal + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "---------------------------" + Environment.NewLine + Environment.NewLine;
                //textoImpressora += "      Itens da Venda" + Environment.NewLine + Environment.NewLine;
                //for (int i = 0; i < tabCupom.Rows.Count; i++)
                //{
                //    textoImpressora += "Produto:" + tabCupom.Rows[i]["Produto"].ToString() + Environment.NewLine + Environment.NewLine;
                //    ValorUnitario = "R$"+Decimal.Parse(tabCupom.Rows[i]["Preço Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Valor Unitario:              " + ValorUnitario + Environment.NewLine + Environment.NewLine;
                //    ValorTotal = "R$"+Decimal.Parse(tabCupom.Rows[i]["Valor Total"].ToString()).ToString("N2");
                //    textoImpressora += "Valor Total:                 " + ValorTotal + Environment.NewLine + Environment.NewLine;
                //    Desconto2 = "R$"+Decimal.Parse(tabCupom.Rows[i]["Desconto do Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Desconto:                     " + Desconto2 + Environment.NewLine + Environment.NewLine;
                //    Total = "R$"+Decimal.Parse(tabCupom.Rows[i]["Valor Final do Produto"].ToString()).ToString("N2");
                //    textoImpressora += "Total:                       " + Total + Environment.NewLine + Environment.NewLine;
                //}
                ////arquivo.WriteLine(textoImpressora);
                ////arquivo.Close();

                //byte[] bytes = utf8.GetBytes(textoImpressora);
                //f.Write(bytes, 0, bytes.Length);
                //f.Close();

                //ReadFile();              
                //printDocument1.Print();                
                //System.IO.File.Delete("cupom.txt");

                ImprimeImpressora();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }
        
        private string stringToPrint;

        private void ReadFile()
        {
            string docName = "cupom.txt";
            printDocument1.DocumentName = docName;
            using (FileStream stream = new FileStream(docName, FileMode.Open))
            using (StreamReader reader = new StreamReader(stream))
            {
                stringToPrint = reader.ReadToEnd();
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //int charactersOnPage = 0;
            //int linesPerPage = 0;

            //// Sets the value of charactersOnPage to the number of characters 
            //// of stringToPrint that will fit within the bounds of the page.
            //e.Graphics.MeasureString(stringToPrint, this.Font,
            //    e.MarginBounds.Size, StringFormat.GenericTypographic,
            //    out charactersOnPage, out linesPerPage);

            //// Draws the string within the bounds of the page
            //e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
            //    e.MarginBounds, StringFormat.GenericTypographic);

            //// Remove the portion of the string that has been printed.
            //stringToPrint = stringToPrint.Substring(charactersOnPage);

            //// Check to see if more pages are to be printed.
            //e.HasMorePages = (stringToPrint.Length > 0);



            int printAreaHeight = 0, printAreaWidth = 0, marginLeft = 0, marginTop = 0;
            int currentChar = 0;

            e.PageSettings.Margins.Left = 0;
            e.PageSettings.Margins.Right = 0;
            e.PageSettings.Landscape = false;

            printAreaHeight = e.PageSettings.PaperSize.Height - e.PageSettings.Margins.Top - e.PageSettings.Margins.Bottom;
            printAreaWidth = e.PageSettings.PaperSize.Width - e.PageSettings.Margins.Left - e.PageSettings.Margins.Right;
            marginLeft = e.PageSettings.Margins.Left;
            marginTop = e.PageSettings.Margins.Top;

            //// Sets the value of charactersOnPage to the number of characters 
            //// of stringToPrint that will fit within the bounds of the page.
            Font ft = new Font(FontFamily.GenericMonospace, 8);

            //  calculate the total number of lines
            int lineCount = Convert.ToInt32(printAreaHeight / ft.Height);
            RectangleF printArea = new RectangleF(marginLeft, marginTop, printAreaWidth, printAreaHeight);
            StringFormat sf = new StringFormat(StringFormatFlags.LineLimit);
            //  how may lines will fit into rectable
            int linesFilled = 0, charsFitted = 0;
            e.Graphics.MeasureString(stringToPrint, ft, new SizeF(printAreaWidth, printAreaHeight), sf, out charsFitted, out linesFilled);
            e.Graphics.DrawString(stringToPrint, ft, Brushes.Black, printArea, sf);
            currentChar += charsFitted;
            if (currentChar < stringToPrint.Length)
                e.HasMorePages = true;
            else
            {
                e.HasMorePages = false;
                currentChar = 0;
            }

        }
    }
}
